const fs = require("fs");
const path = require("path");

/**
 * promise 获取文件内容
 * @param {*} fileName
 * @returns
 */
function getFileContent(fileName) {
  const promise = new Promise((resolve, reject) => {
    const fullFileName = path.resolve(__dirname, "files", fileName);
    fs.readFile(fullFileName, (err, data) => {
      if (err) {
        reject(err);
        return;
      }
      resolve(JSON.parse(data.toString()));
    });
  });
  return promise;
}

getFileContent("a.json")
  .then((aData) => {
    console.log("a data", aData);
    return getFileContent(aData.next);
  })
  .then((bData) => {
    console.log("b data", bData);
    return getFileContent(bData.next);
  })
  .then((cData) => {
    console.log("c data", cData);
  });

/**
 * 同步
 * async await 要点：
 * await 后可追加 promise 对象，获取 resolve 的值
 * await 必须包裹在 async 函数里面
 * async 函数执行返回一个 promise 对象
 * try-catch 截获 promise 中 reject 的值
 */
async function readFileData() {
  try {
    const aData = await getFileContent("a.json");
    const bData = await getFileContent(aData.next);
    const cData = await getFileContent(bData.next);
    console.log("a data", aData);
    console.log("b data", bData);
    console.log("c data", cData);
  } catch (err) {
    console.error(err);
  }
}
readFileData();
